<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>setup与渲染函数一起使用</title>
</head>

<body>
    <div id="app">
        <!-- 在模板上使用时，不需要写.value -->
        <p>age:{{age}}</p>
        <input type="button" value="修改年龄" @click="changeAge">
        <hr/>
        <p>person.name:{{person.name}}</p>
        <p>person.sex:{{person.sex}}</p>
        <input type="button" value="修改性别" @click="changeSex">
        <hr/>
        <p>{{person.name}}的wife:</p>
        <p>年龄：{{person.wife.age}}</p>
        <input type="button" value="修改wife的年龄" @click="changeWifeAge">
    </div>
</body>
<script src="./js/vue.global.js"></script>
<script>

    const { createApp, ref, onMounted,h } = Vue

  
    const app = createApp({
        setup(){

            // 1、基本类型

            let age = ref(12); //相当于data中定义的数据，ref会返回一个响应式对象，该对象的 value属性是12。
            console.log("age",age);//

            function changeAge(){
                age.value++;//修改age.value属性，那么vue框架能够劫持到，所以，成为了响应式的数据。
                console.log("age.value",age.value);
            }

            // 2、引用类型，当给ref函数传入对象时，那么这个对象将通过 reactive() 转为具有深层次响应式的对象(使用proxy)
            let person = ref({
                name:"李晨光",
                sex:"男",
                wife:{
                    name:"田宝",
                    age:16
                }
            })           
            console.log("person",person);
            
            function changeSex(){
                person.value.sex = "女";
            }

            function changeWifeAge(){
                person.value.wife.age++;
            }

            return {
                age,//setup函数返回ref对象时，会做浅层次的解包，（简单粗暴的理解：返回了age.value）
                changeAge,
                person,
                changeSex,
                changeWifeAge
            }
        }
    })



    app.mount('#app')
</script>

</html>